/**
 * ajax pool for mobile vip qq application
 * @author Levin
 * @version 1.0
 */
JF.M("ajaxPool",(function($){

	var p={},pub={};

	pub.recommend={
		isInit:false,
		url:'http://vivasky.com/labs/mapp/tuan/js/testData.js',
		tpl_item:('<li data-pidx="%pidx%">'+
					'<a href="%url%" data-title="团购简介">'+
						'<img src="%logo%" alt="团购简介"/>'+
						'<div class="info">'+
							'<p>%desc%</p>'+
							'<p class="c1">地址：%addr%</p>'+
							'<p>'+
								'<span class="price">&yen;%price%</span>'+
								'<span class="c1">%discount%折</span>'+
								'<span class="c1">%numBuy%人购买</span>'+
							'</p>'+
						'</div>'+
					'</a>'+
				'</li>'),
		getPageIdx:function($ul,isNext,future){
			var p=isNext?$ul.find('li:last').data('pidx'):$ul.find('li:eq(0)').data('pidx');
			p=p||0;
			if(!future) return p;
			p=parseInt(p);
			p=isNext?(p+1):(p-1);
			p=p<1?1:p;

			return p;
		},
		/**
		 * iscroll 列表数据上限处理策略。
		 */
		fixList:function($ul,isNext,$newItems){
			var ret={h:0};
			if($ul.children().length<=p.opts.max_isitem) return ret;

			//超出移除
			var pageToRemove=this.getPageIdx($ul,!isNext,false),
				$temp=$ul.find(":jqmData(pidx='"+pageToRemove+"')");
			
			//向下翻页：计算被移除的元素的总高度
			if(isNext){
				$temp.each(function(i,o){
					ret.h+=$(o).outerHeight(true);
				});
			}else{
				//向上翻页：计算新增元素的总高度
				$newItems.each(function(i,o){
					ret.h-=$(o).outerHeight(true);
				});
			}

			$temp.remove();

			return ret;

		},
		/**
		 * 供iscroll自带的pullToRefresh功能用
		 */
		load:function($target,cbk,isNext){
			var me=this,
				$ul=$target.find("ul:eq(0)"),
				p=me.getPageIdx($ul,isNext,true),
				p0=me.getPageIdx($ul,isNext,false),
				hideLoading=function(){
					//参考iscroll的848行，直接调用refresh方法来隐藏loading...
					JF.iscroll.Get($target[0].id).val.refresh();
				};

			//已经是第一页
			if(p===p0){
				hideLoading();
				return;
			};

			$.ajax({
				url:this.url,
				data:{
					t:(new Date()).getTime(),
					p:p
				},
				dataType:'script',
				success:function(){
					var d=null,
						fix=null;
					if(d=window["MovieData"]){
						if(d.length==0) {
							//TODO:	隐藏iscroll的loading
							return;
						}

						//生成dom
						var _html="";
						for(var i=d.length-1;i>=0;i--){
							//TEST:
							d[i].pidx=p+'';
							_html+=JF.EvalTpl(me.tpl_item,d[i]);
						};
						_html=$(_html);

						//暂时隐藏列表
						$ul.css("visibility","hidden");

						//插入dom
						if(isNext){
							$ul.append(_html);
						}else{
							$ul.prepend(_html);
						};

						me.fixList($ul,isNext,_html);

						if( cbk ) {
							cbk($target,d); 
						};

						//更新iscroll
						me.scrollShow($target,_html,{
							fix:fix,
							$ul:$ul
						});

					};
						
				},
				error:function(){
					//TODO:隐藏iscroll的Loading
					JF.tuan.log("ajax error!");
				}
			});
		},
		load1:function($target,cbk,isNext){
			var me=this,
				$ul=$target.find("ul:eq(0)"),
				p=me.getPageIdx($ul,isNext,true),
				p0=me.getPageIdx($ul,isNext,false);

			//已经是第一页
			if(p===p0){
				if( cbk ) {
					cbk($target,null,true); 
				};
				return;
			};

			$.ajax({
				url:this.url,
				data:{
					t:(new Date()).getTime(),
					p:p
				},
				dataType:'script',
				success:function(){
					var d=null,
						fix=null;
					if(d=window["MovieData"]){
						if(d.length==0) {
							if( cbk ) {
								cbk($target,d,false); 
							};
							return;
						}

						//生成dom
						var _html="";
						for(var i=d.length-1;i>=0;i--){
							//TEST:
							d[i].pidx=p+'';
							_html+=JF.EvalTpl(me.tpl_item,d[i]);
						};
						_html=$(_html);

						//暂时隐藏列表
						$ul.css("visibility","hidden");

						//插入dom
						if(isNext){
							$ul.append(_html);
						}else{
							$ul.prepend(_html);
						};

						fix=me.fixList($ul,isNext,_html);

						if( cbk ) {
							cbk($target,d,false); 
						};

						//更新iscroll
						me.scrollShow($target,_html,{
							fix:fix,
							$ul:$ul
						});

					};
						
				},
				error:function(){
					if( cbk ) {
						cbk($target,d,true); 
					};
				}
			});
		},
		/**
		 * 显示通过ajax获取的内容。scroll to show the content pulled by ajax
		 * @param {Object} $iscroll 使用iscroll的dom的jq对象
		 * @param {Object} $items ajax获取的内容的jq对象
		 * @param {Object} opt 配置项。opt.effect 显示ajax获取的内容时是否使用渐变效果。由于移动终端性能的原因建议不使用;
		 */
		scrollShow:function($iscroll,$items,opt){
			opt=opt||{effect:false,fix:null};
			var iscr=JF.iscroll.Get($iscroll[0].id),
				y0=iscr.val.y;

			if(!opt.effect){
				iscr.val.refresh();
				//调整滚动条至上次的位置
				if(opt.fix&&opt.fix.h){
					iscr.val.scrollTo(0,y0+opt.fix.h,0);
					//iscr.val._pos(0,y0+opt.fix.h);
				};
				//$items.css({opacity:1});
				//opt.$ul.css("visibility","visible");
				setTimeout(function(){
					opt.$ul.css("visibility","visible");
				},60);
				return;
			};
			
			var cnt=$items.length,
				$to=cnt>2?$items.eq(cnt-2):$items.last(),
				fade=function(idx){
					if( idx>=(cnt) ) {
						iscr.val.refresh();
						iscr.val.scrollToElement($to[0],1000);
						$items=$to=iscr=null;
						return;
					};

					$items.eq(idx).animate({opacity:1},"fast",function(){
						fade(idx+1);
					});
				};
			fade(0);
		},
		proxy_load:function(_this){
			_this=_this||JF.ajaxPool.recommend;
			var fun=function($target,cbk){
				JF.ajaxPool.recommend.load.call(_this,$target,cbk,true);
			};
			return fun;
		},
		proxy_load1:function(_this){
			_this=_this||JF.ajaxPool.recommend;
			var fun=function($target,cbk){
				JF.ajaxPool.recommend.load.call(_this,$target,cbk,false);
			};
			return fun;
		},
		setup:function(){
			//团购列表页数据
			var me=this;
			$("#p11").bind("pageshow",function(){
				if(!me.isInit){
					$.mobile.pageLoading();
					/*
					me.load($("#is_p11"),function($t,data){
						$.mobile.pageLoading(true);
						me.isInit=true;
					},true);
					*/
					me.load1($("#is_p11"),function($t,data,isError){
						$.mobile.pageLoading(true);
						me.isInit=true;
						$("#ebtn_more").html(p.opts.txt_btnMore).data("busy",false).show();
					},true);
				}
			});
			//查看更多按钮的事件注册
			$("#ebtn_more").click(function(e){
				var $i=$(this);
				if( $i.data("busy") ) {
					return false;
				};

				$i.html(p.opts.txt_btnLoading).data("busy",true);
				
				me.load1($("#is_p11"),function($t,data,isError){
					$("#ebtn_more").html(p.opts.txt_btnMore).data("busy",false);
				},true);

			});

		}
	};

	pub.onLoad=function(){
		this.recommend.setup();
	};


	pub.init=function(opts){
		p.opts=$.extend({
			max_isitem:20, //iscroll的最大数目
			txt_btnMore:'查看更多',
			txt_btnLoading:'加载中...'
		},opts||{});
	};

	return pub;

})(jQuery));